package VO;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.thoughtworks.xstream.XStream;

import entity.CondicionCompraEntity;
import entity.CotizacionEntity;
import entity.ItemEntity;

public class ConstruirCotizacion {
	private CotizacionEntity cotizacion;
	
	public ConstruirCotizacion(CotizacionEntity coti){
		this.cotizacion=coti;
	}
	
	public Document generarXML() throws ParserConfigurationException, SAXException{

		XStream x = new XStream();
		
		x.processAnnotations(CotizacionVO.class);
		
		CotizacionVO cot = new CotizacionVO();
		Date fecha=cotizacion.getFecha();
		cot.setFecha(fecha.getDate()+"/"+fecha.getMonth()+"/"+fecha.getYear());
		Date vencimiento=cotizacion.getfechaVencimiento();
		cot.setFechaVencimiento(vencimiento.getDate()+"/"+vencimiento.getMonth()+"/"+vencimiento.getYear());
		cot.setIva(cotizacion.getIva());
		cot.setNumero(cotizacion.getNumero());
		cot.setTotal(cotizacion.getTotal());
				
		ClienteVO cli = new ClienteVO();
		cli.setCuil(cotizacion.getCliente().getCuit());
		cli.setRazonsocal(cotizacion.getCliente().getNombre());
		cot.setCliente(cli);
		
		List<CondicionCompraEntity>condiciones=cotizacion.getCondicionCompra();
		CondicionesCompraVO con=new CondicionesCompraVO();
		List<ItemCond> items=new ArrayList<ItemCond>();
		for(int i=0;i<condiciones.size();i++){
			CondicionCompraEntity condi=condiciones.get(i);
			ItemCond it=new ItemCond();
			it.setFormaPago(condi.getFormaDePago());
			it.setDescuentos(condi.getDescuentos());
			it.setIntereses(condi.getIntereses());
			it.setPlazo(condi.getPlazo());
			items.add(it);
		}
		con.setItem(items);
		cot.setCondicionCompra(con);
		
		List<ItemEntity> itemsRods=cotizacion.getItems();
		Rodamientos ro=new Rodamientos();
		List<ItemVO> item=new ArrayList<ItemVO>();
		for(int i=0;i<itemsRods.size();i++){
			ItemEntity its=itemsRods.get(i);
			ItemVO itss=new ItemVO();
			itss.setCantidad(its.getCantidad());
			itss.setMarca(its.getRodamiento().getMarca());
			itss.setOrigen(its.getRodamiento().getOrigen());
			itss.setSerie(its.getRodamiento().getCodigo());
			itss.setSufijo(its.getRodamiento().getNombre());
			itss.setPrecio(its.getPrecio());
			item.add(itss);
		}
		ro.setItem(item);
		cot.setRodamientos(ro);
		
				
		String xml = x.toXML(cot);
		BufferedWriter out = null;
		System.out.println("construir cotizacion");
		try {
			out = new BufferedWriter(new FileWriter("Cotizacion.xml"));
			out.write(xml);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
		    try {
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory.newInstance();
		DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
		Document result=null;
		try {
			result = docBuilder.parse(new File("Cotizacion1.xml"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		result.toString();
		return result;
	}

}
